/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： bsp.c
** 模块名称： 板级外设初始化模块
** 版 本 号： V1.0
** 作    者： 蒲磊
** 
** 修改记录： 版本     修改人      时间         修改内容
**
******************************************************************************/
 
/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 本文件宏定义 ('#define')                             
******************************************************************************/
 
/******************************************************************************
* 本文件类型定义 ('typedef')                                         
******************************************************************************/

/******************************************************************************
* 本文件静态函数声明 ('static')
******************************************************************************/

/******************************************************************************
* 全局变量定义 
******************************************************************************/

/*****************************************************************************
* 函数实现 - global ('extern') and local ('static')
******************************************************************************/
 void SystemClock_Config(void);
 
/******************************************************************************
** 功  能：外设初始化
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_Init(void)
{
    __enable_irq();

    HAL_DeInit();
    HAL_Init();
    HAL_Delay(100);
    SystemClock_Config();   
    
    vBsp_GPIO_Init();
 
    vBsp_USART1_Init();             /*开启UART1的DMA传输，接收控制器数据*/   
	vBsp_ADC_Init();                /*开始ADC采样*/
    vBsp_Key_Init();                /*按键缓存初始化*/

    vBsp_Timer14_Init();                /*TIM14初始化，定时周期1S，用于电量缓降、骑行信息的累加、设置界面超时返回、无操作超时关机等*/          
    vBsp_Timer16_Init();                /*TMR16初始化，用于定时收发报文*/
    vBsp_Timer17_Init();                /*TIM17初始化，用于按键扫描（此处只初始化，没有使能定时器）*/
 
	vBsp_LCD_Init();				        /*LCD屏初始化*/
    HAL_TIM_Base_Start_IT(&htim16);         /*开启定时中断，进行报文数据的定时收发*/ 
	HAL_TIM_Base_Start_IT(&htim17);			/*开按键扫描*/
    HAL_Delay(2000);
}	


/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    /** Configure the main internal regulator output voltage
    */
    HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);

    /** Initializes the RCC Oscillators according to the specified parameters
    * in the RCC_OscInitTypeDef structure.
    */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
    RCC_OscInitStruct.PLL.PLLN = 16;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    Error_Handler();
    }

    /** Initializes the CPU, AHB and APB buses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
    {
    Error_Handler();
    }
}


